<?php

/**
 * TasksController
 * 
 * @author Ricardo Simão <code@rpsimao.com>
 * @version 1.0.3 
 * 
 * @todo Poder enviar a tarefa a várias pessoas.
 * @todo Poder enviar conhecimento da tarefa a várias pessoas.
 */

class TasksController extends App_BaseController {
	
	/**
	 * Faz a ligação à tabela Users
	 *
	 * @var App_UserService
	 */
	protected $userService;
	
	/**
	 * Lê e guarda os dados do utilizador corrente
	 *
	 * @var string
	 */
	
	protected $userInfo;
	
	/**
	 * Formulário para criar tarefas
	 *
	 * @var Zend_form
	 */
	protected $form;
	
	/**
	 * Filtra os valores que vêm do formulário
	 *
	 * @var Zend_Filter_StripTag
	 */
	protected $f;
	
	/**
	 * Assunto da tarefa
	 *
	 * @var string
	 */
	protected $assunto;
	
	/**
	 * Texto da tarefa
	 *
	 * @var string
	 */
	protected $tarefa;
	
	/**
	 * Para quem é destinado a tarefa
	 *
	 * @var tarefa
	 */
	protected $para;
	
	/**
	 * Data para a conclusão
	 *
	 * @var string
	 */
	protected $data_limite;
	
	/**
	 * Separa o nome do email da pessoa a enviar a tarefa
	 *
	 * @var array
	 */
	protected $nameEmail;
	
	/**
	 * Cria uma nova tarefa
	 *
	 * @var App_TaskService
	 */
	protected $task;
	
	/**
	 * Autenticação do servidor de email
	 *
	 * @var App_Mail_HandleEmailAuth
	 */
	protected $mailAuth;
	
	/**
	 * Envia email ao destinatário da tarefa
	 *
	 * @var Zend_Mail
	 */
	protected $mail;
	
	/**
	 * Cria o identificador único da tarefa
	 *
	 * @var string
	 */
	protected $uniqueID;
	
	/**
	 * Recupera o id da tarefa através do id2 (identificador único) para um URL das tarefas mais limpo e pequeno
	 *
	 * @var int
	 */
	protected $id;
	
	

	/**
	 * Regista a ligação á tabela Users.
	 * Regista a ligação á tabela Tasks.
	 *
	 * @return mixed
	 */
	
	public function preDispatch() {
		$this->userService = new App_UserService ( );
		$this->tasksService = new App_TasksService ( );
	
	}
	
	/**
	 * Mostra uma breve informação das tarefas
	 * 
	 * @return int
	 */
	public function indexAction() {
		
		// Passa para a VIEW o número das tarefas [Dashboard]
		

		$this->view->unread = count ( $this->tasksService->dashBoardUnreadTasks () );
		$this->view->expired = count ( $this->tasksService->dashBoardExpiredTasks () );
		$this->view->active = count ( $this->tasksService->dashBoardActiveTasks () );
		$this->view->finished = count ( $this->tasksService->dashBoardFinishedTasks () );
		
		//$this->view->url = Zend_Controller_Front::getInstance()->getBaseUrl();
	}
	
	/**
	 * Verifica se o utilizador faz parte dos Administradores
	 * e apresenta ou não o link de acesso.
	 * 
	 * Apresenta o formulário de criação de tarefas
	 * 
	 * @return mixed;
	 */
	
	public function newAction() {
		
		
		$form = App_Forms_NewTask::getForm ();
		$this->view->form = $form;
	
	}
	
	/**
	 * Cria uma nova tarefa
	 * 
	 * @return void
	 */
	
	public function createAction() {
		
		//Vai buscar o formulário de Nova tarefa, e verifica se o méto envia é válido
		$form = App_Forms_NewTask::getForm ();
		if ($form->isValid ( $_POST )) {
			$f = new Zend_Filter_StripTags ( );
			$assunto = $f->filter ( $this->_request->getPost ( 'assunto' ) );
			$tarefa = $f->filter ( $this->_request->getPost ( 'tarefa' ) );
			$para = $f->filter ( $this->_request->getParam ( 'users' ) );
			$data_limite = $f->filter ( $this->_request->getParam ( 'date_new_task' ) );
			
			//separa o nome do email da pessoa a quem se vai enviar a tarefa
			$nameEmail = explode ( "_", $para );
			
			//cria o identificador único da tarefa
			$uniqueID = App_UniqueID::generate ();
			
			//cria a nova tarefa com um id único
			$task = new App_TasksService ( );
			$task->createItem ( $uniqueID, $this->real_name, $nameEmail [0], $nameEmail [1], date ( 'Y-m-d' ), $data_limite, 0, NULL, NULL, $assunto, $tarefa );
			
			//recupera o id da tarefa através do id2 (identificador único) para um url das tarefas mais limpo e pequeno
			$id = $task->retriveIDbyID2($uniqueID);
			
			//Guarda a autenticação ao servidor de email
			$mailAuth = new App_Mail_HandleEmailAuth ( );
			
			//Envia o email a avisar da nova tarefa que foi criada
			$mail = new Zend_Mail('UTF-8');
			$mail->setBodyHtml ( "<b>".$id['id']."</b>" );
			$mail->setFrom ( 'f3@fterceiro.pt', 'Task Manager' );
			$mail->addTo ( $nameEmail [1], $nameEmail [0] );
			$mail->setSubject ( 'Nova Tarefa' );
			$mail->send ( $mailAuth->transport () );
			
			if (!$mail) {
				$this->view->emailMsgType = 'error';
				$this->view->emailMsg = "Ocorreu um um erro ao enviar o email";
			}else {
				$this->view->emailMsgType = 'info';
				$this->view->emailMsg = "Foi enviado um email para " . $nameEmail[0] .'.'; 
			}
			
		
		} else {
			//Se o formulário teiver erros, passa-os para a VIEW
			$this->view->custom_errors = "Ocorreu um erro. Os dados não foram inseridos correctamente. Por favor tente novamente.";
			$this->view->errors = $form->getMessages ();
			$this->view->form = $form;
		}
	
	}
	
	public function getAction() {
		;
	}

}